﻿#region License statement
// NJamb, a specification and delta-specification DSL
// Copyright (c) 2010-2011, Mark Knell
// Published under the MIT License; all other rights reserved
#endregion

#region using...
using NJamb.Parser.SpecificationBuilders;
using NJamb.Parser.SpecificationBuilders.SubjectHas;
using NJamb.Parser.SpecificationBuilders.SubjectIs;
using NJamb.Specifications;
using Stile.Patterns.FluentInterface;
#endregion

namespace NJamb.Parser.Subjects
{
    public interface ISubject {}

    public interface ISubject<TSubject, out TCollaborating, out TSpecifies> : ISubject,
        ICanThrow<TSpecifies>,
        IFluent<TCollaborating>
        where TCollaborating : class, ICollaboratingSubject
        where TSpecifies : class, ISpecification<TSubject> {}

    public interface ISubject<TSubject, out THas, out TIs, out TSpecifies> :
        ISubject<TSubject, ICollaboratingSubject<TSubject, TSpecifies>, TSpecifies>,
        ISpecificationBuilder<TSubject, TSpecifies, THas, TIs>
        where THas : class, IFluentHas<TSubject, TSpecifies>
        where TIs : class, IFluentIs<TSubject, TSpecifies>
        where TSpecifies : class, ISpecification<TSubject> {}
}
